package com.wande.dataplatform.service;

import com.wande.common.mybatis.core.page.PageQuery;
import com.wande.common.mybatis.core.page.TableDataInfo;
import com.wande.dataplatform.domain.DevTask;
import com.wande.dataplatform.domain.bo.DevTaskBo;
import com.wande.dataplatform.domain.dto.ExecutionPlanDTO;
import com.wande.dataplatform.domain.vo.DevInstanceVO;
import com.wande.dataplatform.domain.vo.DevTaskVO;

import java.util.List;
import java.util.Map;

/**
 * 数据开发服务接口
 *
 * @author wande
 */
public interface IDataDevService {

    /**
     * 查询数据开发任务列表
     *
     * @param bo 查询条件
     * @param pageQuery 分页参数
     * @return 任务列表
     */
    TableDataInfo<DevTaskVO> queryPageList(DevTaskBo bo, PageQuery pageQuery);

    /**
     * 查询数据开发任务详情
     *
     * @param id 任务ID
     * @return 任务详情
     */
    DevTaskVO queryById(Long id);

    /**
     * 创建数据开发任务
     *
     * @param bo 任务信息
     * @return 任务ID
     */
    Long createTask(DevTaskBo bo);

    /**
     * 更新数据开发任务
     *
     * @param bo 任务信息
     * @return 是否成功
     */
    Boolean updateTask(DevTaskBo bo);

    /**
     * 删除数据开发任务
     *
     * @param id 任务ID
     * @return 是否成功
     */
    Boolean deleteTask(Long id);

    /**
     * 执行SQL任务
     *
     * @param taskId 任务ID
     * @param params 参数
     * @return 执行结果
     */
    Map<String, Object> executeSql(Long taskId, Map<String, Object> params);

    /**
     * 执行脚本任务
     *
     * @param taskId 任务ID
     * @param params 参数
     * @return 执行结果
     */
    Map<String, Object> executeScript(Long taskId, Map<String, Object> params);

    /**
     * 停止任务执行
     *
     * @param instanceId 实例ID
     * @return 是否成功
     */
    Boolean stopExecution(Long instanceId);

    /**
     * 获取执行计划
     *
     * @param taskId 任务ID
     * @return 执行计划
     */
    ExecutionPlanDTO getExecutionPlan(Long taskId);

    /**
     * 查询任务实例列表
     *
     * @param taskId 任务ID
     * @param pageQuery 分页参数
     * @return 实例列表
     */
    TableDataInfo<DevInstanceVO> queryInstanceList(Long taskId, PageQuery pageQuery);

    /**
     * 查询实例详情
     *
     * @param instanceId 实例ID
     * @return 实例详情
     */
    DevInstanceVO queryInstanceById(Long instanceId);

    /**
     * 发布任务
     *
     * @param taskId 任务ID
     * @return 是否成功
     */
    Boolean publishTask(Long taskId);

    /**
     * 下线任务
     *
     * @param taskId 任务ID
     * @return 是否成功
     */
    Boolean offlineTask(Long taskId);
}
